package br.unifor.ads.desphouse.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

import br.unifor.ads.desphouse.business.UsuarioBusiness;
import br.unifor.ads.desphouse.costumer.JTableAdapter;
import br.unifor.ads.desphouse.entity.Usuario;
import br.unifor.ads.desphouse.exception.BusinessException;
import br.unifor.ads.desphouse.internacionalizacao.Dicionario;
import br.unifor.ads.desphouse.to.UsuarioTO;
import br.unifor.ads.desphouse.util.MensagemUtil;
import br.unifor.ads.desphouse.util.VariaveisAmbiente;

/**
 * Tela de pesquisa de usuarios
 * 
 * @author Alex Girao
 */
public class PainelUsuarioListagem extends PainelGenerico {

	private static final long serialVersionUID = -1227600707368979521L;
	private JTextField jtfChave;
	private JTextField jtfNome;
	private JTableAdapter table;
	private static final String[] COLUNAS_TABELA = {Dicionario.COMUNS_CODIGO,Dicionario.COMUNS_NOME,Dicionario.COMUNS_CHAVE,Dicionario.COMUNS_ATIVO};
	private JButton jbtNovo;
	private JButton jbtExcluir;
	private JButton jbtPesquisar;
	private UsuarioBusiness usuarioBusiness;
	
	public PainelUsuarioListagem() {
		super();
		iniciarComponentes();
		aplicarEventos();
		desabilitarAcoesRegistro();
	}

	@Override
	protected void iniciarComponentes(){
		
		usuarioBusiness = new UsuarioBusiness();
		
		jbtNovo = new JButton(Dicionario.COMUNS_NOVO);
		jbtNovo.setBounds(12, 12, 117, 25);
		add(jbtNovo);

		JLabel jlbChave = new JLabel(Dicionario.COMUNS_CHAVE+":");
		jlbChave.setBounds(12, 81, 70, 15);
		add(jlbChave);

		jtfChave = new JTextField();
		jtfChave.setBounds(62, 79, 114, 19);
		add(jtfChave);
		jtfChave.setColumns(10);

		JLabel jlbNome = new JLabel(Dicionario.COMUNS_NOME+":");
		jlbNome.setBounds(187, 81, 70, 15);
		add(jlbNome);

		jtfNome = new JTextField();
		jtfNome.setBounds(239, 79, 114, 19);
		add(jtfNome);
		jtfNome.setColumns(10);

		jbtPesquisar = new JButton(Dicionario.COMUNS_PESQUISAR);
		jbtPesquisar.setBounds(365, 76, 117, 25);
		add(jbtPesquisar);

		//table
		table = new JTableAdapter(COLUNAS_TABELA,12, 157, 470, 431);
		pesquisar();
		add(table);

		jbtExcluir = new JButton(Dicionario.COMUNS_EXCLUIR);
		jbtExcluir.setBounds(365, 125, 117, 25);
		add(jbtExcluir);

	}

	private void pesquisar() {
		try {
			UsuarioTO to = new UsuarioTO();
			to.setChave(jtfChave.getText());
			to.setNome(jtfNome.getText());
			List<Usuario> list = usuarioBusiness.buscarPorFiltro(to);
			atualizarTable(list);
		} catch (BusinessException e) {
			e.printStackTrace();
			MensagemUtil.exibirPopUpErro(telaPai, Dicionario.CRITICA_COMUNS_FALHA_PESQUISA);
		}
		
	}

	private void atualizarTable(List<Usuario> list) {
		table.limparLinhas();
		if(!list.isEmpty()){
			for (Usuario u : list) {
				table.adicionarLinha(new Object[]{u.getCodigo(),u.getNome(),u.getChave(),u.getAtivo()?Dicionario.COMUNS_SIM:Dicionario.COMUNS_NAO});
			}
		}else{
			MensagemUtil.exibirPopUpInformacao(telaPai, Dicionario.MENSAGEM_DADOS_NAO_ENCONTRADOS);
		}
	}

	@Override
	protected void aplicarEventos() {
		jbtNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				telaPai.atualizarPainel(new PainelUsuarioCadastro());
			}
		});
		jbtPesquisar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				pesquisar();
			}
		});
		jbtExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				excluir();
			}
		});
		table.addMouseListener(new MouseListener() {
			public void mouseReleased(MouseEvent arg0) {}
			public void mousePressed(MouseEvent arg0) {}
			public void mouseEntered(MouseEvent arg0) {}
			public void mouseExited(MouseEvent arg0) {}
			public void mouseClicked(MouseEvent arg0) {
				habilitarAcoesRegistro();
			}
		});
	}
	
	private void habilitarAcoesRegistro(){
		jbtExcluir.setEnabled(true);
	}
	
	private void desabilitarAcoesRegistro(){
		jbtExcluir.setEnabled(false);
	}
	
	private void excluir(){
		boolean confirmado = MensagemUtil.confirmarAcao(telaPai, Dicionario.COMUNS_CONFIRMAR_ACAO);
		if(confirmado){
			String chave = table.getValueAt(table.getSelectedRow(), 2).toString();
			try{
				if(!chave.equalsIgnoreCase(VariaveisAmbiente.USUARIO_ATUAL.getChave())){
					usuarioBusiness.excluirPorChave(chave);
					MensagemUtil.exibirPopUpInformacao(telaPai, Dicionario.MENSAGEM_REMOVIDO_SUCESSO);
					pesquisar();
				}else{
					MensagemUtil.exibirPopUpErro(telaPai, Dicionario.CRITICA_USUARIO_REMOVER_LOGADO);
				}
			}catch(Exception e){
				e.printStackTrace();
				MensagemUtil.exibirPopUpErro(telaPai, Dicionario.CRITICA_COMUNS_FALHA_REMOVER);
			}
			finally{
				desabilitarAcoesRegistro();
			}
		}
	}
}
